home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 / Ham Radio 2000.iso / ham2000 / misc / dspice0s / modchk.c < prev    next >
C/C++ Source or Header  |  1992-11-21  |  62KB  |  1,804 lines

  1. /* modchk.f -- translated by f2c (version of 3 February 1990  3:36:42).
  2.    You must link the resulting object file with the libraries:
  3.     -lF77 -lI77 -lm -lc   (in that order)
  4. */
  5.  
  6. #include "f2c.h"
  7.  
  8. /* Common Block Declarations */
  9.  
  10. struct {
  11.     integer ielmnt, isbckt, nsbckt, iunsat, nunsat, itemps, numtem, isens, 
  12.         nsens, ifour, nfour, ifield, icode, idelim, icolum, insize, 
  13.         junode, lsbkpt, numbkp, iorder, jmnode, iur, iuc, ilc, ilr, 
  14.         numoff, isr, nmoffc, iseq, iseq1, neqn, nodevs, ndiag, iswap, 
  15.         iequa, macins, lvnim1, lx0, lvn, lynl, lyu, lyl, lx1, lx2, lx3, 
  16.         lx4, lx5, lx6, lx7, ld0, ld1, ltd, imynl, imvn, lcvn, nsnod, 
  17.         nsmat, nsval, icnod, icmat, icval, loutpt, lpol, lzer, irswpf, 
  18.         irswpr, icswpf, icswpr, irpt, jcpt, irowno, jcolno, nttbr, nttar, 
  19.         lvntmp;
  20. } tabinf_;
  21.  
  22. #define tabinf_1 tabinf_
  23.  
  24. struct {
  25.     doublereal atime, aprog[3], adate, atitle[10], defl, defw, defad, defas, 
  26.         rstats[50];
  27.     integer iwidth, lwidth, nopage;
  28. } miscel_;
  29.  
  30. #define miscel_1 miscel_
  31.  
  32. struct {
  33.     integer locate[50], jelcnt[50], nunods, ncnods, numnod, nstop, nut, nlt, 
  34.         nxtrm, ndist, ntlin, ibr, numvs, numalt, numcyc;
  35. } cirdat_;
  36.  
  37. #define cirdat_1 cirdat_
  38.  
  39. struct {
  40.     doublereal omega, time, delta, delold[7], ag[7], vt, xni, egfet, xmu, 
  41.         sfactr;
  42.     integer mode, modedc, icalc, initf, method, iord, maxord, noncon, iterno, 
  43.         itemno, nosolv, modac, ipiv, ivmflg, ipostp, iscrch, iofile;
  44. } status_;
  45.  
  46. #define status_1 status_
  47.  
  48. struct {
  49.     integer iprnta, iprntl, iprntm, iprntn, iprnto, limtim, limpts, lvlcod, 
  50.         lvltim, itl1, itl2, itl3, itl4, itl5, itl6, igoof, nogo, keof;
  51. } flags_;
  52.  
  53. #define flags_1 flags_
  54.  
  55. struct {
  56.     doublereal twopi, xlog2, xlog10, root2, rad, boltz, charge, ctok, gmin, 
  57.         reltol, abstol, vntol, trtol, chgtol, eps0, epssil, epsox, pivtol,
  58.          pivrel;
  59. } knstnt_;
  60.  
  61. #define knstnt_1 knstnt_
  62.  
  63. struct {
  64.     doublereal value[200000];
  65. } blank_;
  66.  
  67. #define blank_1 blank_
  68.  
  69. /* Table of constant values */
  70.  
  71. static integer c__1 = 1;
  72. static integer c__0 = 0;
  73.  
  74. /*<       subroutine modchk >*/
  75. /* Subroutine */ int modchk_()
  76. {
  77.     /* Initialized data */
  78.  
  79.     static struct {
  80.     char e_1[16];
  81.     doublereal e_2;
  82.     } equiv_73 = { {'c', '2', ' ', ' ', ' ', ' ', ' ', ' ', 'c', '4', ' ',
  83.          ' ', ' ', ' ', ' ', ' '}, 0. };
  84.  
  85. #define cpar ((doublereal *)&equiv_73)
  86.  
  87.     static struct {
  88.     char e_1[8];
  89.     doublereal e_2;
  90.     } equiv_74 = { {'.', 'u', ' ', ' ', ' ', ' ', ' ', ' '}, 0. };
  91.  
  92. #define aundef (*(doublereal *)&equiv_74)
  93.  
  94.     static struct {
  95.     char e_1[912];
  96.     doublereal e_2;
  97.     } equiv_75 = { {'i', 's', ' ', ' ', ' ', ' ', ' ', ' ', 'r', 's', ' ',
  98.          ' ', ' ', ' ', ' ', ' ', 'n', ' ', ' ', ' ', ' ', ' ', ' ', 
  99.         ' ', 't', 't', ' ', ' ', ' ', ' ', ' ', ' ', 'c', 'j', 'o', 
  100.         ' ', ' ', ' ', ' ', ' ', 'v', 'j', ' ', ' ', ' ', ' ', ' ', 
  101.         ' ', 'm', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'e', 'g', ' ', 
  102.         ' ', ' ', ' ', ' ', ' ', 'x', 't', 'i', ' ', ' ', ' ', ' ', 
  103.         ' ', 'k', 'f', ' ', ' ', ' ', ' ', ' ', ' ', 'a', 'f', ' ', 
  104.         ' ', ' ', ' ', ' ', ' ', 'f', 'c', ' ', ' ', ' ', ' ', ' ', 
  105.         ' ', 'b', 'v', ' ', ' ', ' ', ' ', ' ', ' ', 'i', 'b', 'v', 
  106.         ' ', ' ', ' ', ' ', ' ', 'i', 's', ' ', ' ', ' ', ' ', ' ', 
  107.         ' ', 'b', 'f', ' ', ' ', ' ', ' ', ' ', ' ', 'n', 'f', ' ', 
  108.         ' ', ' ', ' ', ' ', ' ', 'v', 'a', 'f', ' ', ' ', ' ', ' ', 
  109.         ' ', 'i', 'k', 'f', ' ', ' ', ' ', ' ', ' ', 'i', 's', 'e', 
  110.         ' ', ' ', ' ', ' ', ' ', 'n', 'e', ' ', ' ', ' ', ' ', ' ', 
  111.         ' ', 'b', 'r', ' ', ' ', ' ', ' ', ' ', ' ', 'n', 'r', ' ', 
  112.         ' ', ' ', ' ', ' ', ' ', 'v', 'a', 'r', ' ', ' ', ' ', ' ', 
  113.         ' ', 'i', 'k', 'r', ' ', ' ', ' ', ' ', ' ', 'i', 's', 'c', 
  114.         ' ', ' ', ' ', ' ', ' ', 'n', 'c', ' ', ' ', ' ', ' ', ' ', 
  115.         ' ', '0', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '0', ' ', ' ', 
  116.         ' ', ' ', ' ', ' ', ' ', 'r', 'b', ' ', ' ', ' ', ' ', ' ', 
  117.         ' ', 'i', 'r', 'b', ' ', ' ', ' ', ' ', ' ', 'r', 'b', 'm', 
  118.         ' ', ' ', ' ', ' ', ' ', 'r', 'e', ' ', ' ', ' ', ' ', ' ', 
  119.         ' ', 'r', 'c', ' ', ' ', ' ', ' ', ' ', ' ', 'c', 'j', 'e', 
  120.         ' ', ' ', ' ', ' ', ' ', 'v', 'j', 'e', ' ', ' ', ' ', ' ', 
  121.         ' ', 'm', 'j', 'e', ' ', ' ', ' ', ' ', ' ', 't', 'f', ' ', 
  122.         ' ', ' ', ' ', ' ', ' ', 'x', 't', 'f', ' ', ' ', ' ', ' ', 
  123.         ' ', 'v', 't', 'f', ' ', ' ', ' ', ' ', ' ', 'i', 't', 'f', 
  124.         ' ', ' ', ' ', ' ', ' ', 'p', 't', 'f', ' ', ' ', ' ', ' ', 
  125.         ' ', 'c', 'j', 'c', ' ', ' ', ' ', ' ', ' ', 'v', 'j', 'c', 
  126.         ' ', ' ', ' ', ' ', ' ', 'm', 'j', 'c', ' ', ' ', ' ', ' ', 
  127.         ' ', 'x', 'c', 'j', 'c', ' ', ' ', ' ', ' ', 't', 'r', ' ', 
  128.         ' ', ' ', ' ', ' ', ' ', '0', ' ', ' ', ' ', ' ', ' ', ' ', 
  129.         ' ', '0', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '0', ' ', ' ', 
  130.         ' ', ' ', ' ', ' ', ' ', '0', ' ', ' ', ' ', ' ', ' ', ' ', 
  131.         ' ', 'c', 'j', 's', ' ', ' ', ' ', ' ', ' ', 'v', 'j', 's', 
  132.         ' ', ' ', ' ', ' ', ' ', 'm', 'j', 's', ' ', ' ', ' ', ' ', 
  133.         ' ', 'x', 't', 'b', ' ', ' ', ' ', ' ', ' ', 'e', 'g', ' ', 
  134.         ' ', ' ', ' ', ' ', ' ', 'x', 't', 'i', ' ', ' ', ' ', ' ', 
  135.         ' ', 'k', 'f', ' ', ' ', ' ', ' ', ' ', ' ', 'a', 'f', ' ', 
  136.         ' ', ' ', ' ', ' ', ' ', 'f', 'c', ' ', ' ', ' ', ' ', ' ', 
  137.         ' ', 'v', 't', 'o', ' ', ' ', ' ', ' ', ' ', 'b', 'e', 't', 
  138.         'a', ' ', ' ', ' ', ' ', 'l', 'a', 'm', 'b', 'd', 'a', ' ', 
  139.         ' ', 'r', 'd', ' ', ' ', ' ', ' ', ' ', ' ', 'r', 's', ' ', 
  140.         ' ', ' ', ' ', ' ', ' ', 'c', 'g', 's', ' ', ' ', ' ', ' ', 
  141.         ' ', 'c', 'g', 'd', ' ', ' ', ' ', ' ', ' ', 'p', 'b', ' ', 
  142.         ' ', ' ', ' ', ' ', ' ', 'i', 's', ' ', ' ', ' ', ' ', ' ', 
  143.         ' ', 'k', 'f', ' ', ' ', ' ', ' ', ' ', ' ', 'a', 'f', ' ', 
  144.         ' ', ' ', ' ', ' ', ' ', 'f', 'c', ' ', ' ', ' ', ' ', ' ', 
  145.         ' ', 'l', 'e', 'v', 'e', 'l', ' ', ' ', ' ', 'v', 't', 'o', 
  146.         ' ', ' ', ' ', ' ', ' ', 'k', 'p', ' ', ' ', ' ', ' ', ' ', 
  147.         ' ', 'g', 'a', 'm', 'm', 'a', ' ', ' ', ' ', 'p', 'h', 'i', 
  148.         ' ', ' ', ' ', ' ', ' ', 'l', 'a', 'm', 'b', 'd', 'a', ' ', 
  149.         ' ', 'r', 'd', ' ', ' ', ' ', ' ', ' ', ' ', 'r', 's', ' ', 
  150.         ' ', ' ', ' ', ' ', ' ', 'c', 'b', 'd', ' ', ' ', ' ', ' ', 
  151.         ' ', 'c', 'b', 's', ' ', ' ', ' ', ' ', ' ', 'i', 's', ' ', 
  152.         ' ', ' ', ' ', ' ', ' ', 'p', 'b', ' ', ' ', ' ', ' ', ' ', 
  153.         ' ', 'c', 'g', 's', 'o', ' ', ' ', ' ', ' ', 'c', 'g', 'd', 
  154.         'o', ' ', ' ', ' ', ' ', 'c', 'g', 'b', 'o', ' ', ' ', ' ', 
  155.         ' ', 'r', 's', 'h', ' ', ' ', ' ', ' ', ' ', 'c', 'j', ' ', 
  156.         ' ', ' ', ' ', ' ', ' ', 'm', 'j', ' ', ' ', ' ', ' ', ' ', 
  157.         ' ', 'c', 'j', 's', 'w', ' ', ' ', ' ', ' ', 'm', 'j', 's', 
  158.         'w', ' ', ' ', ' ', ' ', 'j', 's', ' ', ' ', ' ', ' ', ' ', 
  159.         ' ', 't', 'o', 'x', ' ', ' ', ' ', ' ', ' ', 'n', 's', 'u', 
  160.         'b', ' ', ' ', ' ', ' ', 'n', 's', 's', ' ', ' ', ' ', ' ', 
  161.         ' ', 'n', 'f', 's', ' ', ' ', ' ', ' ', ' ', 't', 'p', 'g', 
  162.         ' ', ' ', ' ', ' ', ' ', 'x', 'j', ' ', ' ', ' ', ' ', ' ', 
  163.         ' ', 'l', 'd', ' ', ' ', ' ', ' ', ' ', ' ', 'u', 'o', ' ', 
  164.         ' ', ' ', ' ', ' ', ' ', 'u', 'c', 'r', 'i', 't', ' ', ' ', 
  165.         ' ', 'u', 'e', 'x', 'p', ' ', ' ', ' ', ' ', 'u', 't', 'r', 
  166.         'a', ' ', ' ', ' ', ' ', 'v', 'm', 'a', 'x', ' ', ' ', ' ', 
  167.         ' ', 'n', 'e', 'f', 'f', ' ', ' ', ' ', ' ', 'x', 'q', 'c', 
  168.         ' ', ' ', ' ', ' ', ' ', 'k', 'f', ' ', ' ', ' ', ' ', ' ', 
  169.         ' ', 'a', 'f', ' ', ' ', ' ', ' ', ' ', ' ', 'f', 'c', ' ', 
  170.         ' ', ' ', ' ', ' ', ' ', 'd', 'e', 'l', 't', 'a', ' ', ' ', 
  171.         ' ', 't', 'h', 'e', 't', 'a', ' ', ' ', ' ', 'e', 't', 'a', 
  172.         ' ', ' ', ' ', ' ', ' ', 'k', 'a', 'p', 'p', 'a', ' ', ' ', 
  173.         ' '}, 0. };
  174.  
  175. #define ampar ((doublereal *)&equiv_75)
  176.  
  177.     static doublereal defval[115] = { 1e-14,0.,1.,0.,0.,1.,.5,1.11,3.,0.,1.,
  178.         .5,0.,.001,1e-16,100.,1.,0.,0.,0.,1.5,1.,1.,0.,0.,0.,2.,0.,1.,0.,
  179.         0.,0.,0.,0.,0.,.75,.33,0.,0.,0.,0.,0.,0.,.75,.33,1.,0.,0.,0.,0.,
  180.         0.,0.,.75,0.,0.,1.11,3.,0.,1.,.5,-2.,1e-4,0.,0.,0.,0.,0.,1.,1e-14,
  181.         0.,1.,.5,1.,0.,2e-5,0.,.6,0.,0.,0.,0.,0.,1e-14,.8,0.,0.,0.,0.,0.,
  182.         .5,0.,.33,0.,0.,0.,0.,0.,1.,0.,0.,600.,1e4,0.,0.,0.,1.,1.,0.,1.,
  183.         .5,0.,0.,0.,.2,0. };
  184.     static integer ifmt[115] = { 4,1,1,2,2,1,1,1,1,2,1,1,2,2,4,3,3,2,2,2,1,3,
  185.         3,2,2,2,1,0,0,1,2,1,1,1,2,1,1,2,2,2,2,1,2,1,1,1,2,0,0,0,0,2,1,1,2,
  186.         1,1,2,2,2,3,4,1,1,1,2,2,1,2,2,1,1,3,3,4,1,1,2,1,1,2,2,2,1,2,2,2,1,
  187.         2,1,2,1,2,2,2,2,2,1,2,2,1,2,1,1,2,1,1,2,1,1,1,1,1,1,0 };
  188.     static integer ivchk[115] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  189.         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  190.         0,-1,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,-1,0,0,0,0,0,0,0,0,0,
  191.         0,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
  192.     static struct {
  193.     char e_1[32];
  194.     doublereal e_2;
  195.     } equiv_76 = { {'d', 'i', 'o', 'd', 'e', ' ', 'm', 'o', 'd', 'e', 'l',
  196.          ' ', 'p', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 's', ' ', 
  197.         ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, 0. };
  198.  
  199. #define titled ((doublereal *)&equiv_76)
  200.  
  201.     static struct {
  202.     char e_1[32];
  203.     doublereal e_2;
  204.     } equiv_77 = { {'b', 'j', 't', ' ', 'm', 'o', 'd', 'e', 'l', ' ', 'p',
  205.          'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 's', ' ', ' ', ' ', 
  206.         ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, 0. };
  207.  
  208. #define titleb ((doublereal *)&equiv_77)
  209.  
  210.     static struct {
  211.     char e_1[32];
  212.     doublereal e_2;
  213.     } equiv_78 = { {'j', 'f', 'e', 't', ' ', 'm', 'o', 'd', 'e', 'l', ' ',
  214.          'p', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 's', ' ', ' ', 
  215.         ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, 0. };
  216.  
  217. #define titlej ((doublereal *)&equiv_78)
  218.  
  219.     static struct {
  220.     char e_1[32];
  221.     doublereal e_2;
  222.     } equiv_79 = { {'m', 'o', 's', 'f', 'e', 't', ' ', 'm', 'o', 'd', 'e',
  223.          'l', ' ', 'p', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 's', 
  224.         ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, 0. };
  225.  
  226. #define titlem ((doublereal *)&equiv_79)
  227.  
  228.     static struct {
  229.     char e_1[32];
  230.     doublereal e_2;
  231.     } equiv_80 = { {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'n', 'p', 'n',
  232.          ' ', ' ', ' ', ' ', ' ', 'n', 'j', 'f', ' ', ' ', ' ', ' ', 
  233.         ' ', 'n', 'm', 'o', 's', ' ', ' ', ' ', ' '}, 0. };
  234.  
  235. #define antype ((doublereal *)&equiv_80)
  236.  
  237.     static struct {
  238.     char e_1[32];
  239.     doublereal e_2;
  240.     } equiv_81 = { {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'p', 'n', 'p',
  241.          ' ', ' ', ' ', ' ', ' ', 'p', 'j', 'f', ' ', ' ', ' ', ' ', 
  242.         ' ', 'p', 'm', 'o', 's', ' ', ' ', ' ', ' '}, 0. };
  243.  
  244. #define aptype ((doublereal *)&equiv_81)
  245.  
  246.     static integer ipar[5] = { 0,14,60,72,114 };
  247.  
  248.     /* Format strings */
  249.     static char fmt_31[] = "(\0020*error*:  nsub <= ni in mosfet model \002,\
  250. a8,/)";
  251.     static char fmt_89[] = "(\0020warning:  minimum base resistance (rbm) is\
  252.  less than \002,\002total (rb) for model \002,a8,/10x,\002 rbm set equal to \
  253. rb\002,/)";
  254.     static char fmt_121[] = "(\0020warning:  the value of lambda for mosfet \
  255. model \002,a8,/,\002 is unusually large and might cause nonconvergence\002,/)"
  256.         ;
  257.     static char fmt_241[] = "(//11x,12(2x,a8))";
  258.     static char fmt_261[] = "(\0020type\002,4x,12(4x,a6))";
  259.     static char fmt_321[] = "(\0020\002,a8,12f10.3)";
  260.     static char fmt_331[] = "(\0020\002,a8,1p12d10.2)";
  261.     static char fmt_411[] = "(\0020warning:  in diode model \002,a8,\002 ibv\
  262.  increased to \002,1pe10.3,11x,\002to resolve incompatibility with specified\
  263.  is\002/)";
  264.     static char fmt_415[] = "(\0020warning:  unable to match forward and rev\
  265. erse diode regions\002,/,11x,\002bv = \002,1pd10.3,\002 and ibv = \002,d10.3\
  266. ,/)";
  267.     static char fmt_911[] = "(\0020*error*:  effective channel length of \
  268. \002,a8,\002 less than \002,\002zero.\002,/\002 check value of ld for model\
  269.  \002,a8)";
  270.  
  271.     /* System generated locals */
  272.     integer i_1, i_2;
  273.     doublereal d_1;
  274.  
  275.     /* Builtin functions */
  276.     double log(), sqrt();
  277.     integer s_wsfe(), do_fio(), e_wsfe();
  278.     double exp();
  279.  
  280.     /* Local variables */
  281.     static integer itab[50], locm, locv, locs, locn;
  282.     static doublereal tnom;
  283.     static integer kntr;
  284.     static doublereal type, csat;
  285.     static integer iter;
  286.     static doublereal xcbv;
  287.     static integer i, k;
  288.     static doublereal xleff, wkfng;
  289.     static integer nopar;
  290.     static doublereal xnsub;
  291.     extern /* Subroutine */ int title_();
  292.     static doublereal ad, fc;
  293.     static integer id;
  294.     static doublereal cj, pb, pc, as, pe;
  295.     static integer iccflg;
  296.     static doublereal atable[12], btable[12], bv, xm;
  297. #define nodplc ((integer *)&blank_1)
  298. #define cvalue ((complex *)&blank_1)
  299.     static integer nummod, loc;
  300.     static doublereal fermis, fermig, wkfngs;
  301.     static integer kntlim;
  302.     static doublereal xfc, cbv;
  303.     static integer lev;
  304.     static doublereal xmc, cox, xme, vte, xbv, tol, xkt;
  305.  
  306.     /* Fortran I/O blocks */
  307.     static cilist io__29 = { 0, 0, 0, fmt_31, 0 };
  308.     static cilist io__36 = { 0, 0, 0, fmt_89, 0 };
  309.     static cilist io__38 = { 0, 0, 0, fmt_121, 0 };
  310.     static cilist io__43 = { 0, 0, 0, fmt_241, 0 };
  311.     static cilist io__45 = { 0, 0, 0, fmt_261, 0 };
  312.     static cilist io__48 = { 0, 0, 0, fmt_321, 0 };
  313.     static cilist io__49 = { 0, 0, 0, fmt_331, 0 };
  314.     static cilist io__50 = { 0, 0, 0, fmt_321, 0 };
  315.     static cilist io__59 = { 0, 0, 0, fmt_411, 0 };
  316.     static cilist io__64 = { 0, 0, 0, fmt_415, 0 };
  317.     static cilist io__70 = { 0, 0, 0, fmt_911, 0 };
  318.  
  319.  
  320. /*<       implicit double precision (a-h,o-z) >*/
  321.  
  322. /*     this routine performs one-time processing of device model para- */
  323. /* meters and prints out a device model summary.  it also reserves the */
  324. /* additional nodes required by nonzero device extrinsic resistances. */
  325.  
  326. /* spice version 2g.6  sccsid=tabinf 3/15/83 */
  327. /*<       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem, >*/
  328. /*<      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize, >*/
  329. /*<      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr, >*/
  330. /*<      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1, >*/
  331. /*<      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd, >*/
  332. /*<      5   imynl,imvn,lcvn,nsnod,nsmat,nsval,icnod,icmat,icval, >*/
  333. /*<      6   loutpt,lpol,lzer,irswpf,irswpr,icswpf,icswpr,irpt,jcpt, >*/
  334. /*<      7   irowno,jcolno,nttbr,nttar,lvntmp >*/
  335. /* spice version 2g.6  sccsid=miscel 3/15/83 */
  336. /*<       common /miscel/ atime,aprog(3),adate,atitle(10),defl,defw,defad, >*/
  337. /*<      1  defas,rstats(50),iwidth,lwidth,nopage >*/
  338. /* spice version 2g.6  sccsid=cirdat 3/15/83 */
  339. /*<       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop, >*/
  340. /*<      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs,numalt,numcyc >*/
  341. /* spice version 2g.6  sccsid=status 3/15/83 */
  342. /*<       common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet, >*/
  343. /*<      1   xmu,sfactr,mode,modedc,icalc,initf,method,iord,maxord,noncon, >*/
  344. /*<      2   iterno,itemno,nosolv,modac,ipiv,ivmflg,ipostp,iscrch,iofile >*/
  345. /* spice version 2g.6  sccsid=flags 3/15/83 */
  346. /*<       common /flags/ iprnta,iprntl,iprntm,iprntn,iprnto,limtim,limpts, >*/
  347. /*<      1   lvlcod,lvltim,itl1,itl2,itl3,itl4,itl5,itl6,igoof,nogo,keof >*/
  348. /* spice version 2g.6  sccsid=knstnt 3/15/83 */
  349. /*<       common /knstnt/ twopi,xlog2,xlog10,root2,rad,boltz,charge,ctok, >*/
  350. /*<      1   gmin,reltol,abstol,vntol,trtol,chgtol,eps0,epssil,epsox, >*/
  351. /*<      2   pivtol,pivrel >*/
  352. /* spice version 2g.6  sccsid=blank 3/15/83 */
  353. /*<       common /blank/ value(200000) >*/
  354. /*<       integer nodplc(64) >*/
  355. /*<       complex cvalue(32) >*/
  356. /*<       equivalence (value(1),nodplc(1),cvalue(1)) >*/
  357.  
  358.  
  359. /*<       dimension itab(50),atable(12) >*/
  360. /*<       dimension cpar(2),btable(12) >*/
  361. /*<       dimension antype(4),aptype(4) >*/
  362. /*<       dimension ipar(5),ampar(115),defval(115),ifmt(115),ivchk(115) >*/
  363. /*<       dimension titled(4),titleb(4),titlej(4),titlem(4) >*/
  364. /*<       data titled / 8hdiode mo, 8hdel para, 8hmeters  , 8h         / >*/
  365. /*<       data titleb / 8hbjt mode, 8hl parame, 8hters    , 8h         / >*/
  366. /*<       data titlej / 8hjfet mod, 8hel param, 8heters   , 8h         / >*/
  367. /*<       data titlem / 8hmosfet m, 8hodel par, 8hameters , 8h         / >*/
  368. /*<       data antype /1h ,3hnpn,3hnjf,4hnmos/ >*/
  369. /*<       data aptype /1h ,3hpnp,3hpjf,4hpmos/ >*/
  370. /*<       data ipar /0,14,60,72,114/ >*/
  371. /*<       data cpar / 3hc2 ,3hc4 / >*/
  372. /*<       data aundef /2h.u/ >*/
  373. /*<       data ampar / >*/
  374. /*<      1   6his    ,6hrs    ,6hn     ,6htt    ,6hcjo   ,6hvj    ,6hm     , >*/
  375. /*<      2   6heg    ,6hxti   ,6hkf    ,6haf    ,6hfc    ,6hbv    ,6hibv   , >*/
  376. /*<      1   6his    ,6hbf    ,6hnf    ,6hvaf   ,6hikf   ,6hise   ,6hne    , >*/
  377. /*<      2   6hbr    ,6hnr    ,6hvar   ,6hikr   ,6hisc   ,6hnc    ,6h0     , >*/
  378. /*<      3   6h0     ,6hrb    ,6hirb   ,6hrbm   ,6hre    ,6hrc    ,6hcje   , >*/
  379. /*<      4   6hvje   ,6hmje   ,6htf    ,6hxtf   ,6hvtf   ,6hitf   ,6hptf   , >*/
  380. /*<      5   6hcjc   ,6hvjc   ,6hmjc   ,6hxcjc  ,6htr    ,6h0     ,6h0     , >*/
  381. /*<      6   6h0     ,6h0     ,6hcjs   ,6hvjs   ,6hmjs   ,6hxtb   ,6heg    , >*/
  382. /*<      7   6hxti   ,6hkf    ,6haf    ,6hfc    , >*/
  383. /*<      1   6hvto   ,6hbeta  ,6hlambda,6hrd    ,6hrs    ,6hcgs   ,6hcgd   , >*/
  384. /*<      2   6hpb    ,6his    ,6hkf    ,6haf    ,6hfc    , >*/
  385. /*<      1   6hlevel ,6hvto   ,6hkp    ,6hgamma ,6hphi   ,6hlambda,6hrd    , >*/
  386. /*<      2   6hrs    ,6hcbd   ,6hcbs   ,6his    ,6hpb    ,6hcgso  ,6hcgdo  , >*/
  387. /*<      3   6hcgbo  ,6hrsh   ,6hcj    ,6hmj    ,6hcjsw  ,6hmjsw  ,6hjs    , >*/
  388. /*<      4   6htox   ,6hnsub  ,6hnss   ,6hnfs   ,6htpg   ,6hxj    ,6hld    , >*/
  389. /*<      5   6huo    ,6hucrit ,6huexp  ,6hutra  ,6hvmax  ,6hneff  ,6hxqc   , >*/
  390. /*<      6   6hkf    ,6haf    ,6hfc    ,6hdelta ,6htheta ,6heta   ,6hkappa , >*/
  391. /*<      7   0.0d0   / >*/
  392. /*<       data defval / >*/
  393. /*<      1   1.0d-14,  0.0d0,  1.0d0,2*0.0d0,  1.0d0,  0.5d0, 1.11d0, >*/
  394. /*<      2     3.0d0,  0.0d0,  1.0d0,  0.5d0,  0.0d0, 1.0d-3, >*/
  395. /*<      1   1.0d-16,100.0d0,  1.0d0,3*0.0d0,  1.5d0,2*1.0d0,3*0.0d0, >*/
  396. /*<      2     2.0d0,  0.0d0,  1.0d0,6*0.0d0, 0.75d0, 0.33d0,2*0.0d0, >*/
  397. /*<      3   4*0.0d0, 0.75d0, 0.33d0,  1.0d0,6*0.0d0, 0.75d0,2*0.0d0, >*/
  398. /*<      4    1.11d0,  3.0d0,  0.0d0,  1.0d0,  0.5d0, >*/
  399. /*<      1    -2.0d0, 1.0d-4,5*0.0d0,  1.0d0,1.0d-14,  0.0d0,  1.0d0, >*/
  400. /*<      2     0.5d0, >*/
  401. /*<      1     1.0d0,  0.0d0, 2.0d-5,  0.0d0,  0.6d0,5*0.0d0,1.0d-14, >*/
  402. /*<      2     0.8d0,5*0.0d0,  0.5d0,  0.0d0, 0.33d0,5*0.0d0,  1.0d0, >*/
  403. /*<      3   2*0.0d0,600.0d0, 1.0d+4,3*0.0d0,  1.0d0,  1.0d0,  0.0d0, >*/
  404. /*<      4     1.0d0,  0.5d0,3*0.0d0,  0.2d0, >*/
  405. /*<      5     0.0d0/ >*/
  406. /*<       data ifmt / >*/
  407. /*<      1   4,1,1,2,2,1,1,1,1,2,1,1,2,2, >*/
  408. /*<      2   4,3,3,2,2,2,1,3,3,2,2,2,1,0,0,1,2,1,1,1,2,1,1,2,2,2,2,1,2,1, >*/
  409. /*<      2   1,1,2,0,0,0,0,2,1,1,2,1,1,2,2,2, >*/
  410. /*<      3   3,4,1,1,1,2,2,1,2,2,1,1, >*/
  411. /*<      4   3,3,4,1,1,2,1,1,2,2,2,1,2,2,2,1,2,1,2,1,2,2,2,2,2,1,2,2, >*/
  412. /*<      4   1,2,1,1,2,1,1,2,1,1,1,1,1,1, >*/
  413. /*<      5   0/ >*/
  414. /*<       data ivchk / >*/
  415. /*<      1   0,0,0,0,0,0,0,0,0,0,0,0,0,0, >*/
  416. /*<      2   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, >*/
  417. /*<      2   0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0, >*/
  418. /*<      3   -1,0,0,0,0,0,0,0,0,0,0,0, >*/
  419. /*<      4   0,-1,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,-1, >*/
  420. /*<      4   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, >*/
  421. /*<      5   0/ >*/
  422.  
  423.  
  424. /*<       tnom=value(itemps+1)+ctok >*/
  425.     tnom = blank_1.value[tabinf_1.itemps] + knstnt_1.ctok;
  426. /*<       xkt=boltz*tnom >*/
  427.     xkt = knstnt_1.boltz * tnom;
  428. /*<       vt=xkt/charge >*/
  429.     status_1.vt = xkt / knstnt_1.charge;
  430. /*<       xni=1.45d16 >*/
  431.     status_1.xni = 1.45e16;
  432. /*<       egfet=1.16d0-(7.02d-4*tnom*tnom)/(tnom+1108.0d0) >*/
  433.     status_1.egfet = 1.16 - tnom * 7.02e-4 * tnom / (tnom + 1108.);
  434. /*<       nummod=jelcnt(21)+jelcnt(22)+jelcnt(23)+jelcnt(24) >*/
  435.     nummod = cirdat_1.jelcnt[20] + cirdat_1.jelcnt[21] + cirdat_1.jelcnt[22] 
  436.         + cirdat_1.jelcnt[23];
  437. /*<       if (nummod.eq.0) go to 1000 >*/
  438.     if (nummod == 0) {
  439.     goto L1000;
  440.     }
  441.  
  442. /*  special preprocessing for mosfet models */
  443.  
  444. /*<       loc=locate(24) >*/
  445.     loc = cirdat_1.locate[23];
  446. /*<     5 if (loc.eq.0) go to 35 >*/
  447. L5:
  448.     if (loc == 0) {
  449.     goto L35;
  450.     }
  451. /*<       locv=nodplc(loc+1) >*/
  452.     locv = nodplc[loc];
  453. /*<       type=nodplc(loc+2) >*/
  454.     type = (doublereal) nodplc[loc + 1];
  455.  
  456. /*     default parameters for higher level mos models */
  457.  
  458. /*<       lev=value(locv+1) >*/
  459.     lev = (integer) blank_1.value[locv];
  460. /*<       if (value(locv+1).eq.aundef) lev=1 >*/
  461.     if (blank_1.value[locv] == aundef) {
  462.     lev = 1;
  463.     }
  464. /*<       if (value(locv+23).ne.aundef) xnsub=value(locv+23)*1.0d6 >*/
  465.     if (blank_1.value[locv + 22] != aundef) {
  466.     xnsub = blank_1.value[locv + 22] * 1e6;
  467.     }
  468. /*<       if (value(locv+22).eq.aundef.and.lev.gt.1) value(locv+22)=1.0d-7 >*/
  469.     if (blank_1.value[locv + 21] == aundef && lev > 1) {
  470.     blank_1.value[locv + 21] = 1e-7;
  471.     }
  472. /*<       if (value(locv+22).eq.aundef) go to 33 >*/
  473.     if (blank_1.value[locv + 21] == aundef) {
  474.     goto L33;
  475.     }
  476. /*<       cox=epsox/value(locv+22) >*/
  477.     cox = knstnt_1.epsox / blank_1.value[locv + 21];
  478.  
  479. /*     compute kp, if not input, using default mobility 600 cm**2/v*sec */
  480.  
  481.  
  482. /*<       if (value(locv+3).ne.aundef) go to 10 >*/
  483.     if (blank_1.value[locv + 2] != aundef) {
  484.     goto L10;
  485.     }
  486. /*<       if (value(locv+29).eq.aundef) value(locv+29)=600.0d0 >*/
  487.     if (blank_1.value[locv + 28] == aundef) {
  488.     blank_1.value[locv + 28] = 600.;
  489.     }
  490. /*<       value(locv+3)=value(locv+29)*cox*1.0d-4 >*/
  491.     blank_1.value[locv + 2] = blank_1.value[locv + 28] * cox * 1e-4;
  492. /*<    10 if (value(locv+23).eq.aundef) go to 33 >*/
  493. L10:
  494.     if (blank_1.value[locv + 22] == aundef) {
  495.     goto L33;
  496.     }
  497. /*<       if (xnsub.le.xni) go to 30 >*/
  498.     if (xnsub <= status_1.xni) {
  499.     goto L30;
  500.     }
  501.  
  502. /*     nsub nonzero => process oriented model */
  503.  
  504. /*<       if (value(locv+5).eq.aundef) value(locv+5)= >*/
  505. /*<      1   dmax1((2.0d0*vt*dlog(xnsub/xni)),0.1d0) >*/
  506.     if (blank_1.value[locv + 4] == aundef) {
  507. /* Computing MAX */
  508.     d_1 = status_1.vt * 2. * log(xnsub / status_1.xni);
  509.     blank_1.value[locv + 4] = max(.1,d_1);
  510.     }
  511. /*<       fermis=type*0.5d0*value(locv+5) >*/
  512.     fermis = type * .5 * blank_1.value[locv + 4];
  513. /*<       wkfng=3.2d0 >*/
  514.     wkfng = 3.2;
  515. /*<       if (value(locv+26).eq.aundef) value(locv+26)=1.0d0 >*/
  516.     if (blank_1.value[locv + 25] == aundef) {
  517.     blank_1.value[locv + 25] = 1.;
  518.     }
  519. /*<       if (value(locv+26).eq.0.0d0) go to 15 >*/
  520.     if (blank_1.value[locv + 25] == 0.) {
  521.     goto L15;
  522.     }
  523.  
  524. /*  polysilicon gate */
  525.  
  526. /*<       fermig=type*value(locv+26)*0.5d0*egfet >*/
  527.     fermig = type * blank_1.value[locv + 25] * .5 * status_1.egfet;
  528. /*<       wkfng=3.25d0+0.5d0*egfet-fermig >*/
  529.     wkfng = status_1.egfet * .5 + 3.25 - fermig;
  530. /*<    15 wkfngs=wkfng-(3.25d0+0.5d0*egfet+fermis) >*/
  531. L15:
  532.     wkfngs = wkfng - (status_1.egfet * .5 + 3.25 + fermis);
  533. /*<       if (value(locv+4).eq.aundef) >*/
  534. /*<      1   value(locv+4)=dsqrt(2.0d0*epssil*charge*xnsub)/cox >*/
  535.     if (blank_1.value[locv + 3] == aundef) {
  536.     blank_1.value[locv + 3] = sqrt(knstnt_1.epssil * 2. * knstnt_1.charge 
  537.         * xnsub) / cox;
  538.     }
  539.  
  540. /*     computed vto */
  541.  
  542. /*<       if (value(locv+2).ne.aundef) go to 20 >*/
  543.     if (blank_1.value[locv + 1] != aundef) {
  544.     goto L20;
  545.     }
  546. /*<       if (value(locv+24).eq.aundef) value(locv+24)=0.0d0 >*/
  547.     if (blank_1.value[locv + 23] == aundef) {
  548.     blank_1.value[locv + 23] = 0.;
  549.     }
  550. /*<       value(locv+44)=wkfngs-value(locv+24)*1.0d4*charge/cox >*/
  551.     blank_1.value[locv + 43] = wkfngs - blank_1.value[locv + 23] * 1e4 * 
  552.         knstnt_1.charge / cox;
  553. /*<       value(locv+2)=value(locv+44) >*/
  554. /*<      1   +type*(value(locv+4)*dsqrt(value(locv+5))+value(locv+5)) >*/
  555.     blank_1.value[locv + 1] = blank_1.value[locv + 43] + type * (
  556.         blank_1.value[locv + 3] * sqrt(blank_1.value[locv + 4]) + 
  557.         blank_1.value[locv + 4]);
  558. /*<       go to 25 >*/
  559.     goto L25;
  560.  
  561. /*     measured vto has been input */
  562.  
  563. /*<    20 value(locv+44)=value(locv+2) >*/
  564. /*<      1   -type*(value(locv+4)*dsqrt(value(locv+5))+value(locv+5)) >*/
  565. L20:
  566.     blank_1.value[locv + 43] = blank_1.value[locv + 1] - type * (
  567.         blank_1.value[locv + 3] * sqrt(blank_1.value[locv + 4]) + 
  568.         blank_1.value[locv + 4]);
  569. /*<    25 value(locv+45)=dsqrt((epssil+epssil)/(charge*xnsub)) >*/
  570. L25:
  571.     blank_1.value[locv + 44] = sqrt((knstnt_1.epssil + knstnt_1.epssil) / (
  572.         knstnt_1.charge * xnsub));
  573. /*<       go to 33 >*/
  574.     goto L33;
  575. /*<    30 value(locv+23)=0.0d0 >*/
  576. L30:
  577.     blank_1.value[locv + 22] = 0.;
  578. /*<       write (iofile,31) value(locv) >*/
  579.     io__29.ciunit = status_1.iofile;
  580.     s_wsfe(&io__29);
  581.     do_fio(&c__1, (char *)&blank_1.value[locv - 1], (ftnlen)sizeof(doublereal)
  582.         );
  583.     e_wsfe();
  584. /*<    31 format('0*error*:  nsub <= ni in mosfet model ',a8,/) >*/
  585. /*<       nogo=1 >*/
  586.     flags_1.nogo = 1;
  587.  
  588. /*   special processing for mos3: limit kappa>0, */
  589. /*   set to zero lambda,ucrit,uexp and utar */
  590.  
  591. /*<    33 if (lev.ne.3) go to 34 >*/
  592. L33:
  593.     if (lev != 3) {
  594.     goto L34;
  595.     }
  596. /*<       if (value(locv+42).eq.aundef) value(locv+42)=0.2d0 >*/
  597.     if (blank_1.value[locv + 41] == aundef) {
  598.     blank_1.value[locv + 41] = .2;
  599.     }
  600. /*<       value(locv+6)=0.0d0 >*/
  601.     blank_1.value[locv + 5] = 0.;
  602. /*<       value(locv+30)=0.0d0 >*/
  603.     blank_1.value[locv + 29] = 0.;
  604. /*<       value(locv+31)=0.0d0 >*/
  605.     blank_1.value[locv + 30] = 0.;
  606. /*<       value(locv+32)=0.0d0 >*/
  607.     blank_1.value[locv + 31] = 0.;
  608. /*<    34 loc=nodplc(loc) >*/
  609. L34:
  610.     loc = nodplc[loc - 1];
  611. /*<       go to 5 >*/
  612.     goto L5;
  613.  
  614. /*     cycle thru devices */
  615.  
  616. /*<    35 kntlim=lwidth/11 >*/
  617. L35:
  618.     kntlim = miscel_1.lwidth / 11;
  619. /*<       do 390 id=1,4 >*/
  620.     for (id = 1; id <= 4; ++id) {
  621. /*<       if (jelcnt(id+20).eq.0) go to 390 >*/
  622.     if (cirdat_1.jelcnt[id + 19] == 0) {
  623.         goto L390;
  624.     }
  625. /*<       locm=ipar(id) >*/
  626.     locm = ipar[id - 1];
  627. /*<       nopar=ipar(id+1)-locm >*/
  628.     nopar = ipar[id] - locm;
  629. /*<       do 45 i=1,nopar >*/
  630.     i_1 = nopar;
  631.     for (i = 1; i <= i_1; ++i) {
  632. /*<       if (ifmt(locm+i).ge.3) go to 40 >*/
  633.         if (ifmt[locm + i - 1] >= 3) {
  634.         goto L40;
  635.         }
  636. /*<       itab(i)=0 >*/
  637.         itab[i - 1] = 0;
  638. /*<       go to 45 >*/
  639.         goto L45;
  640. /*<    40 itab(i)=ifmt(locm+i)-2 >*/
  641. L40:
  642.         itab[i - 1] = ifmt[locm + i - 1] - 2;
  643. /*<    45 continue >*/
  644. L45:
  645.     ;}
  646.  
  647. /*  assign default values */
  648.  
  649. /*<       loc=locate(id+20) >*/
  650.     loc = cirdat_1.locate[id + 19];
  651. /*<    50 if (loc.eq.0) go to 70 >*/
  652. L50:
  653.     if (loc == 0) {
  654.         goto L70;
  655.     }
  656. /*<       locv=nodplc(loc+1) >*/
  657.     locv = nodplc[loc];
  658. /*<       do 65 i=1,nopar >*/
  659.     i_1 = nopar;
  660.     for (i = 1; i <= i_1; ++i) {
  661. /*<       if (value(locv+i).eq.aundef) go to 62 >*/
  662.         if (blank_1.value[locv + i - 1] == aundef) {
  663.         goto L62;
  664.         }
  665. /*<       if (ivchk(locm+i).lt.0) go to 55 >*/
  666.         if (ivchk[locm + i - 1] < 0) {
  667.         goto L55;
  668.         }
  669. /*<       if (value(locv+i).lt.0.0d0) go to 62 >*/
  670.         if (blank_1.value[locv + i - 1] < 0.) {
  671.         goto L62;
  672.         }
  673. /*<    55 if (itab(i).ne.0) go to 65 >*/
  674. L55:
  675.         if (itab[i - 1] != 0) {
  676.         goto L65;
  677.         }
  678. /*<       itab(i)=ifmt(locm+i) >*/
  679.         itab[i - 1] = ifmt[locm + i - 1];
  680. /*<       go to 65 >*/
  681.         goto L65;
  682. /*<    62 value(locv+i)=defval(locm+i) >*/
  683. L62:
  684.         blank_1.value[locv + i - 1] = defval[locm + i - 1];
  685. /*<    65 continue >*/
  686. L65:
  687.     ;}
  688. /*<       loc=nodplc(loc) >*/
  689.     loc = nodplc[loc - 1];
  690. /*<       go to 50 >*/
  691.     goto L50;
  692.  
  693. /*     limit model values */
  694.  
  695. /*<    70 go to (80,85,90,95), id >*/
  696. L70:
  697.     switch (id) {
  698.         case 1:  goto L80;
  699.         case 2:  goto L85;
  700.         case 3:  goto L90;
  701.         case 4:  goto L95;
  702.     }
  703. /* ...  diodes */
  704. /*<    80 loc=locate(21) >*/
  705. L80:
  706.     loc = cirdat_1.locate[20];
  707. /*<    82 if (loc.eq.0) go to 130 >*/
  708. L82:
  709.     if (loc == 0) {
  710.         goto L130;
  711.     }
  712. /*<       locv=nodplc(loc+1) >*/
  713.     locv = nodplc[loc];
  714. /*<       value(locv+7)=dmin1(value(locv+7),0.9d0) >*/
  715. /* Computing MAX */
  716.     d_1 = blank_1.value[locv + 6];
  717.     blank_1.value[locv + 6] = min(.9,d_1);
  718. /*<       value(locv+8)=dmax1(value(locv+8),0.1d0) >*/
  719. /* Computing MAX */
  720.     d_1 = blank_1.value[locv + 7];
  721.     blank_1.value[locv + 7] = max(.1,d_1);
  722. /*<       value(locv+11)=dmax1(value(locv+11),0.1d0) >*/
  723. /* Computing MAX */
  724.     d_1 = blank_1.value[locv + 10];
  725.     blank_1.value[locv + 10] = max(.1,d_1);
  726. /*<       value(locv+12)=dmin1(value(locv+12),0.95d0) >*/
  727. /* Computing MAX */
  728.     d_1 = blank_1.value[locv + 11];
  729.     blank_1.value[locv + 11] = min(.95,d_1);
  730. /*<       loc=nodplc(loc) >*/
  731.     loc = nodplc[loc - 1];
  732. /*<       go to 82 >*/
  733.     goto L82;
  734. /* ...  bipolar transistors */
  735. /*<    85 loc=locate(22) >*/
  736. L85:
  737.     loc = cirdat_1.locate[21];
  738. /*<    87 if (loc.eq.0) go to 130 >*/
  739. L87:
  740.     if (loc == 0) {
  741.         goto L130;
  742.     }
  743. /*<       locv=nodplc(loc+1) >*/
  744.     locv = nodplc[loc];
  745. /*<       value(locv+23)=dmin1(value(locv+23),0.9d0) >*/
  746. /* Computing MAX */
  747.     d_1 = blank_1.value[locv + 22];
  748.     blank_1.value[locv + 22] = min(.9,d_1);
  749. /*<       if (value(locv+24).eq.0.0d0) value(locv+28)=0.0d0 >*/
  750.     if (blank_1.value[locv + 23] == 0.) {
  751.         blank_1.value[locv + 27] = 0.;
  752.     }
  753. /*<       value(locv+31)=dmin1(value(locv+31),0.9d0) >*/
  754. /* Computing MAX */
  755.     d_1 = blank_1.value[locv + 30];
  756.     blank_1.value[locv + 30] = min(.9,d_1);
  757. /*<       value(locv+32)=dmin1(value(locv+32),1.0d0) >*/
  758. /* Computing MAX */
  759.     d_1 = blank_1.value[locv + 31];
  760.     blank_1.value[locv + 31] = min(1.,d_1);
  761. /*<       value(locv+40)=dmin1(value(locv+40),0.9d0) >*/
  762. /* Computing MAX */
  763.     d_1 = blank_1.value[locv + 39];
  764.     blank_1.value[locv + 39] = min(.9,d_1);
  765. /*<       value(locv+42)=dmax1(value(locv+42),0.1d0) >*/
  766. /* Computing MAX */
  767.     d_1 = blank_1.value[locv + 41];
  768.     blank_1.value[locv + 41] = max(.1,d_1);
  769. /*<       value(locv+45)=dmax1(value(locv+45),0.1d0) >*/
  770. /* Computing MAX */
  771.     d_1 = blank_1.value[locv + 44];
  772.     blank_1.value[locv + 44] = max(.1,d_1);
  773. /*<       value(locv+46)=dmin1(value(locv+46),0.9999d0) >*/
  774. /* Computing MAX */
  775.     d_1 = blank_1.value[locv + 45];
  776.     blank_1.value[locv + 45] = min(.9999,d_1);
  777. /*<       loc=nodplc(loc) >*/
  778.     loc = nodplc[loc - 1];
  779. /*<       if (value(locv+18).eq.0.0d0) value(locv+18)=value(locv+16) >*/
  780.     if (blank_1.value[locv + 17] == 0.) {
  781.         blank_1.value[locv + 17] = blank_1.value[locv + 15];
  782.     }
  783. /*<       if (value(locv+16).ge.value(locv+18)) go to 87 >*/
  784.     if (blank_1.value[locv + 15] >= blank_1.value[locv + 17]) {
  785.         goto L87;
  786.     }
  787. /*<       write(iofile,89) value(locv) >*/
  788.     io__36.ciunit = status_1.iofile;
  789.     s_wsfe(&io__36);
  790.     do_fio(&c__1, (char *)&blank_1.value[locv - 1], (ftnlen)sizeof(
  791.         doublereal));
  792.     e_wsfe();
  793. /*<    89 format('0warning:  minimum base resistance (rbm) is less than ' >*/
  794. /*<      1       ,'total (rb) for model ',a8,/10x,' rbm set equal to rb',/) >*/
  795. /*<       value(locv+18)=value(locv+16) >*/
  796.     blank_1.value[locv + 17] = blank_1.value[locv + 15];
  797. /*<       go to 87 >*/
  798.     goto L87;
  799. /* ...  jfets */
  800. /*<    90 loc=locate(23) >*/
  801. L90:
  802.     loc = cirdat_1.locate[22];
  803. /*<    92 if (loc.eq.0) go to 130 >*/
  804. L92:
  805.     if (loc == 0) {
  806.         goto L130;
  807.     }
  808. /*<       locv=nodplc(loc+1) >*/
  809.     locv = nodplc[loc];
  810. /*<       value(locv+11)=dmax1(value(locv+11),0.1d0) >*/
  811. /* Computing MAX */
  812.     d_1 = blank_1.value[locv + 10];
  813.     blank_1.value[locv + 10] = max(.1,d_1);
  814. /*<       value(locv+12)=dmin1(value(locv+12),0.95d0) >*/
  815. /* Computing MAX */
  816.     d_1 = blank_1.value[locv + 11];
  817.     blank_1.value[locv + 11] = min(.95,d_1);
  818. /*<       loc=nodplc(loc) >*/
  819.     loc = nodplc[loc - 1];
  820. /*<       go to 92 >*/
  821.     goto L92;
  822. /* ...  mosfets */
  823. /*<    95 loc=locate(24) >*/
  824. L95:
  825.     loc = cirdat_1.locate[23];
  826. /*<    97 if (loc.eq.0) go to 130 >*/
  827. L97:
  828.     if (loc == 0) {
  829.         goto L130;
  830.     }
  831. /*<       locv=nodplc(loc+1) >*/
  832.     locv = nodplc[loc];
  833.  
  834. /*<   100 value(locv+37)=dmax1(value(locv+37),0.1d0) >*/
  835. /* L100: */
  836. /* Computing MAX */
  837.     d_1 = blank_1.value[locv + 36];
  838.     blank_1.value[locv + 36] = max(.1,d_1);
  839. /*<       value(locv+38)=dmin1(value(locv+38),0.95d0) >*/
  840. /* Computing MAX */
  841.     d_1 = blank_1.value[locv + 37];
  842.     blank_1.value[locv + 37] = min(.95,d_1);
  843. /*<       if (value(locv+23).le.0.0d0) go to 120 >*/
  844.     if (blank_1.value[locv + 22] <= 0.) {
  845.         goto L120;
  846.     }
  847. /*<       cj=dsqrt(epssil*charge*value(locv+23)*1.0d6/ >*/
  848. /*<      1   (2.0d0*value(locv+12))) >*/
  849.     cj = sqrt(knstnt_1.epssil * knstnt_1.charge * blank_1.value[locv + 22]
  850.          * 1e6 / (blank_1.value[locv + 11] * 2.));
  851. /*<       if (value(locv+9).le.0.0d0) go to 105 >*/
  852.     if (blank_1.value[locv + 8] <= 0.) {
  853.         goto L105;
  854.     }
  855. /*<       itab(9)=2 >*/
  856.     itab[8] = 2;
  857. /*<   105 if (value(locv+10).le.0.0d0) go to 110 >*/
  858. L105:
  859.     if (blank_1.value[locv + 9] <= 0.) {
  860.         goto L110;
  861.     }
  862. /*<       itab(10)=2 >*/
  863.     itab[9] = 2;
  864. /*<       go to 115 >*/
  865.     goto L115;
  866. /*<   110 if (value(locv+17).le.0.0d0) value(locv+17)=cj >*/
  867. L110:
  868.     if (blank_1.value[locv + 16] <= 0.) {
  869.         blank_1.value[locv + 16] = cj;
  870.     }
  871. /*<       itab(17)=2 >*/
  872.     itab[16] = 2;
  873. /*<   115 if ((value(locv+7).le.0.0d0).and. >*/
  874. /*<      1    (value(locv+8).le.0.0d0)) go to 120 >*/
  875. L115:
  876.     if (blank_1.value[locv + 6] <= 0. && blank_1.value[locv + 7] <= 0.) {
  877.         goto L120;
  878.     }
  879. /*<       itab(7)=2 >*/
  880.     itab[6] = 2;
  881. /*<       itab(8)=2 >*/
  882.     itab[7] = 2;
  883. /*<   120 if (value(locv+6).ge.0.2d0) write (iofile,121) value(locv) >*/
  884. L120:
  885.     if (blank_1.value[locv + 5] >= .2) {
  886.         io__38.ciunit = status_1.iofile;
  887.         s_wsfe(&io__38);
  888.         do_fio(&c__1, (char *)&blank_1.value[locv - 1], (ftnlen)sizeof(
  889.             doublereal));
  890.         e_wsfe();
  891.     }
  892. /*<   121 format ('0warning:  the value of lambda for mosfet model ',a8,/, >*/
  893. /*<      1   ' is unusually large and might cause nonconvergence',/) >*/
  894. /*<       if (lev.ne.2) value(locv+35)=1.0d0 >*/
  895.     if (lev != 2) {
  896.         blank_1.value[locv + 34] = 1.;
  897.     }
  898. /*<       if (lev.ne.3) go to 125 >*/
  899.     if (lev != 3) {
  900.         goto L125;
  901.     }
  902. /*<       itab(40)=1 >*/
  903.     itab[39] = 1;
  904. /*<       itab(41)=1 >*/
  905.     itab[40] = 1;
  906. /*<       itab(42)=1 >*/
  907.     itab[41] = 1;
  908. /*<       itab(43)=1 >*/
  909.     itab[42] = 1;
  910. /*<   125 loc=nodplc(loc) >*/
  911. L125:
  912.     loc = nodplc[loc - 1];
  913. /*<       go to 97 >*/
  914.     goto L97;
  915.  
  916. /*     print model parameters */
  917.  
  918. /*<   130 if (iprntm.eq.0) go to 360 >*/
  919. L130:
  920.     if (flags_1.iprntm == 0) {
  921.         goto L360;
  922.     }
  923. /*<       locs=locate(id+20) >*/
  924.     locs = cirdat_1.locate[id + 19];
  925. /*<   140 kntr=0 >*/
  926. L140:
  927.     kntr = 0;
  928. /*<       loc=locs >*/
  929.     loc = locs;
  930. /*<       go to (150,160,170,180), id >*/
  931.     switch (id) {
  932.         case 1:  goto L150;
  933.         case 2:  goto L160;
  934.         case 3:  goto L170;
  935.         case 4:  goto L180;
  936.     }
  937. /*<   150 call title(0,lwidth,1,titled) >*/
  938. L150:
  939.     title_(&c__0, &miscel_1.lwidth, &c__1, titled);
  940. /*<       go to 200 >*/
  941.     goto L200;
  942. /*<   160 call title(0,lwidth,1,titleb) >*/
  943. L160:
  944.     title_(&c__0, &miscel_1.lwidth, &c__1, titleb);
  945. /*<       go to 200 >*/
  946.     goto L200;
  947. /*<   170 call title(0,lwidth,1,titlej) >*/
  948. L170:
  949.     title_(&c__0, &miscel_1.lwidth, &c__1, titlej);
  950. /*<       go to 200 >*/
  951.     goto L200;
  952. /*<   180 call title(0,lwidth,1,titlem) >*/
  953. L180:
  954.     title_(&c__0, &miscel_1.lwidth, &c__1, titlem);
  955. /*<   200 if (loc.eq.0) go to 210 >*/
  956. L200:
  957.     if (loc == 0) {
  958.         goto L210;
  959.     }
  960. /*<       if (kntr.lt.kntlim) go to 220 >*/
  961.     if (kntr < kntlim) {
  962.         goto L220;
  963.     }
  964. /*<   210 locn=loc >*/
  965. L210:
  966.     locn = loc;
  967. /*<       go to 240 >*/
  968.     goto L240;
  969. /*<   220 kntr=kntr+1 >*/
  970. L220:
  971.     ++kntr;
  972. /*<       locv=nodplc(loc+1) >*/
  973.     locv = nodplc[loc];
  974. /*<       atable(kntr)=value(locv) >*/
  975.     atable[kntr - 1] = blank_1.value[locv - 1];
  976. /*<   230 loc=nodplc(loc) >*/
  977. /* L230: */
  978.     loc = nodplc[loc - 1];
  979. /*<       go to 200 >*/
  980.     goto L200;
  981. /*<   240 write (iofile,241) (atable(k),k=1,kntr) >*/
  982. L240:
  983.     io__43.ciunit = status_1.iofile;
  984.     s_wsfe(&io__43);
  985.     i_1 = kntr;
  986.     for (k = 1; k <= i_1; ++k) {
  987.         do_fio(&c__1, (char *)&atable[k - 1], (ftnlen)sizeof(doublereal));
  988.  
  989.     }
  990.     e_wsfe();
  991. /*<   241 format(//11x,12(2x,a8)) >*/
  992. /*<       if (id.eq.1) go to 300 >*/
  993.     if (id == 1) {
  994.         goto L300;
  995.     }
  996. /*<       kntr=0 >*/
  997.     kntr = 0;
  998. /*<       loc=locs >*/
  999.     loc = locs;
  1000. /*<   250 if (loc.eq.0) go to 260 >*/
  1001. L250:
  1002.     if (loc == 0) {
  1003.         goto L260;
  1004.     }
  1005. /*<       if (kntr.ge.kntlim) go to 260 >*/
  1006.     if (kntr >= kntlim) {
  1007.         goto L260;
  1008.     }
  1009. /*<       kntr=kntr+1 >*/
  1010.     ++kntr;
  1011. /*<       atable(kntr)=antype(id) >*/
  1012.     atable[kntr - 1] = antype[id - 1];
  1013. /*<       if (nodplc(loc+2).eq.-1) atable(kntr)=aptype(id) >*/
  1014.     if (nodplc[loc + 1] == -1) {
  1015.         atable[kntr - 1] = aptype[id - 1];
  1016.     }
  1017. /*<       loc=nodplc(loc) >*/
  1018.     loc = nodplc[loc - 1];
  1019. /*<       go to 250 >*/
  1020.     goto L250;
  1021. /*<   260 write (iofile,261) (atable(k),k=1,kntr) >*/
  1022. L260:
  1023.     io__45.ciunit = status_1.iofile;
  1024.     s_wsfe(&io__45);
  1025.     i_1 = kntr;
  1026.     for (k = 1; k <= i_1; ++k) {
  1027.         do_fio(&c__1, (char *)&atable[k - 1], (ftnlen)sizeof(doublereal));
  1028.  
  1029.     }
  1030.     e_wsfe();
  1031. /*<   261 format('0type',4x,12(4x,a6)) >*/
  1032. /*<   300 do 340 i=1,nopar >*/
  1033. L300:
  1034.     i_1 = nopar;
  1035.     for (i = 1; i <= i_1; ++i) {
  1036. /*<       if (itab(i).eq.0) go to 340 >*/
  1037.         if (itab[i - 1] == 0) {
  1038.         goto L340;
  1039.         }
  1040. /*<       kntr=0 >*/
  1041.         kntr = 0;
  1042. /*<       iccflg=0 >*/
  1043.         iccflg = 0;
  1044. /*<       loc=locs >*/
  1045.         loc = locs;
  1046. /*<   310 if (loc.eq.0) go to 320 >*/
  1047. L310:
  1048.         if (loc == 0) {
  1049.         goto L320;
  1050.         }
  1051. /*<       if (kntr.ge.kntlim) go to 320 >*/
  1052.         if (kntr >= kntlim) {
  1053.         goto L320;
  1054.         }
  1055. /*<       locv=nodplc(loc+1) >*/
  1056.         locv = nodplc[loc];
  1057. /*<       kntr=kntr+1 >*/
  1058.         ++kntr;
  1059. /*<       if (iccflg.ne.0) go to 313 >*/
  1060.         if (iccflg != 0) {
  1061.         goto L313;
  1062.         }
  1063. /*<       if (id.ne.2) go to 315 >*/
  1064.         if (id != 2) {
  1065.         goto L315;
  1066.         }
  1067. /*<       if ((i.ne.6).and.(i.ne.12)) go to 315 >*/
  1068.         if (i != 6 && i != 12) {
  1069.         goto L315;
  1070.         }
  1071. /*<       if (value(locv+i).le.1.0d0) go to 315 >*/
  1072.         if (blank_1.value[locv + i - 1] <= 1.) {
  1073.         goto L315;
  1074.         }
  1075. /*<       iccflg=i/6 >*/
  1076.         iccflg = i / 6;
  1077. /*<   313 btable(kntr)=value(locv+i) >*/
  1078. L313:
  1079.         btable[kntr - 1] = blank_1.value[locv + i - 1];
  1080. /*<       value(locv+i)=value(locv+i)*value(locv+1) >*/
  1081.         blank_1.value[locv + i - 1] *= blank_1.value[locv];
  1082. /*<   315 atable(kntr)=value(locv+i) >*/
  1083. L315:
  1084.         atable[kntr - 1] = blank_1.value[locv + i - 1];
  1085. /*<       loc=nodplc(loc) >*/
  1086.         loc = nodplc[loc - 1];
  1087. /*<       go to 310 >*/
  1088.         goto L310;
  1089. /*<   320 if (itab(i).eq.2) go to 330 >*/
  1090. L320:
  1091.         if (itab[i - 1] == 2) {
  1092.         goto L330;
  1093.         }
  1094. /*<       write (iofile,321) ampar(locm+i),(atable(k),k=1,kntr) >*/
  1095.         io__48.ciunit = status_1.iofile;
  1096.         s_wsfe(&io__48);
  1097.         do_fio(&c__1, (char *)&ar[locm + i - 1], (ftnlen)sizeof(
  1098.             doublereal));
  1099.         i_2 = kntr;
  1100.         for (k = 1; k <= i_2; ++k) {
  1101.         do_fio(&c__1, (char *)&atable[k - 1], (ftnlen)sizeof(
  1102.             doublereal));
  1103.         }
  1104.         e_wsfe();
  1105. /*<   321 format(1h0,a8,12f10.3) >*/
  1106. /*<       go to 340 >*/
  1107.         goto L340;
  1108. /*<   330 write (iofile,331) ampar(locm+i),(atable(k),k=1,kntr) >*/
  1109. L330:
  1110.         io__49.ciunit = status_1.iofile;
  1111.         s_wsfe(&io__49);
  1112.         do_fio(&c__1, (char *)&ar[locm + i - 1], (ftnlen)sizeof(
  1113.             doublereal));
  1114.         i_2 = kntr;
  1115.         for (k = 1; k <= i_2; ++k) {
  1116.         do_fio(&c__1, (char *)&atable[k - 1], (ftnlen)sizeof(
  1117.             doublereal));
  1118.         }
  1119.         e_wsfe();
  1120. /*<   331 format(1h0,a8,1p12d10.2) >*/
  1121. /*<       if (iccflg.eq.0) go to 340 >*/
  1122.         if (iccflg == 0) {
  1123.         goto L340;
  1124.         }
  1125. /*<       write (iofile,321) cpar(iccflg),(btable(k),k=1,kntr) >*/
  1126.         io__50.ciunit = status_1.iofile;
  1127.         s_wsfe(&io__50);
  1128.         do_fio(&c__1, (char *)&cpar[iccflg - 1], (ftnlen)sizeof(
  1129.             doublereal));
  1130.         i_2 = kntr;
  1131.         for (k = 1; k <= i_2; ++k) {
  1132.         do_fio(&c__1, (char *)&btable[k - 1], (ftnlen)sizeof(
  1133.             doublereal));
  1134.         }
  1135.         e_wsfe();
  1136. /*<   340 continue >*/
  1137. L340:
  1138.     ;}
  1139. /*<       if (locn.eq.0) go to 390 >*/
  1140.     if (locn == 0) {
  1141.         goto L390;
  1142.     }
  1143. /*<       locs=locn >*/
  1144.     locs = locn;
  1145. /*<       go to 140 >*/
  1146.     goto L140;
  1147.  
  1148. /*  special  treatment for c2 & c4 in the bjt model */
  1149. /*  when no model parameter print */
  1150.  
  1151. /*<   360 if (id.ne.2) go to 390 >*/
  1152. L360:
  1153.     if (id != 2) {
  1154.         goto L390;
  1155.     }
  1156. /*<       loc=locate(id+20) >*/
  1157.     loc = cirdat_1.locate[id + 19];
  1158. /*<   370 if (loc.eq.0) go to 390 >*/
  1159. L370:
  1160.     if (loc == 0) {
  1161.         goto L390;
  1162.     }
  1163. /*<       locv=nodplc(loc+1) >*/
  1164.     locv = nodplc[loc];
  1165. /*<       if (value(locv+6).ge.1.0d0) >*/
  1166. /*<      1   value(locv+6)=value(locv+6)*value(locv+1) >*/
  1167.     if (blank_1.value[locv + 5] >= 1.) {
  1168.         blank_1.value[locv + 5] *= blank_1.value[locv];
  1169.     }
  1170. /*<       if (value(locv+12).ge.1.0d0) >*/
  1171. /*<      1   value(locv+12)=value(locv+12)*value(locv+1) >*/
  1172.     if (blank_1.value[locv + 11] >= 1.) {
  1173.         blank_1.value[locv + 11] *= blank_1.value[locv];
  1174.     }
  1175. /*<       loc=nodplc(loc) >*/
  1176.     loc = nodplc[loc - 1];
  1177. /*<       go to 370 >*/
  1178.     goto L370;
  1179. /*<   390 continue >*/
  1180. L390:
  1181.     ;}
  1182.  
  1183. /*  process model parameters */
  1184.  
  1185. /*  diodes */
  1186.  
  1187. /*<   400 loc=locate(21) >*/
  1188. /* L400: */
  1189.     loc = cirdat_1.locate[20];
  1190. /*<   410 if (loc.eq.0) go to 420 >*/
  1191. L410:
  1192.     if (loc == 0) {
  1193.     goto L420;
  1194.     }
  1195. /*<       locv=nodplc(loc+1) >*/
  1196.     locv = nodplc[loc];
  1197. /*<       if (value(locv+2).ne.0.0d0) value(locv+2)=1.0d0/value(locv+2) >*/
  1198.     if (blank_1.value[locv + 1] != 0.) {
  1199.     blank_1.value[locv + 1] = 1. / blank_1.value[locv + 1];
  1200.     }
  1201. /*<       pb=value(locv+6) >*/
  1202.     pb = blank_1.value[locv + 5];
  1203. /*<       xm=value(locv+7) >*/
  1204.     xm = blank_1.value[locv + 6];
  1205. /*<       fc=value(locv+12) >*/
  1206.     fc = blank_1.value[locv + 11];
  1207. /*<       value(locv+12)=fc*pb >*/
  1208.     blank_1.value[locv + 11] = fc * pb;
  1209. /*<       xfc=dlog(1.0d0-fc) >*/
  1210.     xfc = log(1. - fc);
  1211. /*<       value(locv+15)=pb*(1.0d0-dexp((1.0d0-xm)*xfc))/(1.0d0-xm) >*/
  1212.     blank_1.value[locv + 14] = pb * (1. - exp((1. - xm) * xfc)) / (1. - xm);
  1213. /*<       value(locv+16)=dexp((1.0d0+xm)*xfc) >*/
  1214.     blank_1.value[locv + 15] = exp((xm + 1.) * xfc);
  1215. /*<       value(locv+17)=1.0d0-fc*(1.0d0+xm) >*/
  1216.     blank_1.value[locv + 16] = 1. - fc * (xm + 1.);
  1217. /*<       csat=value(locv+1) >*/
  1218.     csat = blank_1.value[locv];
  1219. /*<       vte=value(locv+3)*vt >*/
  1220.     vte = blank_1.value[locv + 2] * status_1.vt;
  1221. /*<       value(locv+18)=vte*dlog(vte/(root2*csat)) >*/
  1222.     blank_1.value[locv + 17] = vte * log(vte / (knstnt_1.root2 * csat));
  1223. /*<       bv=value(locv+13) >*/
  1224.     bv = blank_1.value[locv + 12];
  1225. /*<       if (bv.eq.0) go to 418 >*/
  1226.     if (bv == 0.) {
  1227.     goto L418;
  1228.     }
  1229. /*<       cbv=value(locv+14) >*/
  1230.     cbv = blank_1.value[locv + 13];
  1231. /*<       if (cbv.ge.csat*bv/vt) go to 412 >*/
  1232.     if (cbv >= csat * bv / status_1.vt) {
  1233.     goto L412;
  1234.     }
  1235. /*<       cbv=csat*bv/vt >*/
  1236.     cbv = csat * bv / status_1.vt;
  1237. /*<       write (iofile,411) value(locv),cbv >*/
  1238.     io__59.ciunit = status_1.iofile;
  1239.     s_wsfe(&io__59);
  1240.     do_fio(&c__1, (char *)&blank_1.value[locv - 1], (ftnlen)sizeof(doublereal)
  1241.         );
  1242.     do_fio(&c__1, (char *)&cbv, (ftnlen)sizeof(doublereal));
  1243.     e_wsfe();
  1244. /*<   411 format('0warning:  in diode model ',a8,' ibv increased to ',1pe10. >*/
  1245. /*<      1   3,11x,'to resolve incompatibility with specified is'/) >*/
  1246. /*<       xbv=bv >*/
  1247.     xbv = bv;
  1248. /*<       go to 416 >*/
  1249.     goto L416;
  1250. /*<   412 tol=reltol*cbv >*/
  1251. L412:
  1252.     tol = knstnt_1.reltol * cbv;
  1253. /*<       xbv=bv-vt*dlog(1.0d0+cbv/csat) >*/
  1254.     xbv = bv - status_1.vt * log(cbv / csat + 1.);
  1255. /*<       iter=0 >*/
  1256.     iter = 0;
  1257. /*<   413 xbv=bv-vt*dlog(cbv/csat+1.0d0-xbv/vt) >*/
  1258. L413:
  1259.     xbv = bv - status_1.vt * log(cbv / csat + 1. - xbv / status_1.vt);
  1260. /*<       xcbv=csat*(dexp((bv-xbv)/vt)-1.0d0+xbv/vt) >*/
  1261.     xcbv = csat * (exp((bv - xbv) / status_1.vt) - 1. + xbv / status_1.vt);
  1262. /*<       if (dabs(xcbv-cbv).le.tol) go to 416 >*/
  1263.     if ((d_1 = xcbv - cbv, abs(d_1)) <= tol) {
  1264.     goto L416;
  1265.     }
  1266. /*<       iter=iter+1 >*/
  1267.     ++iter;
  1268. /*<       if (iter.lt.25) go to 413 >*/
  1269.     if (iter < 25) {
  1270.     goto L413;
  1271.     }
  1272. /*<       write (iofile,415) xbv,xcbv >*/
  1273.     io__64.ciunit = status_1.iofile;
  1274.     s_wsfe(&io__64);
  1275.     do_fio(&c__1, (char *)&xbv, (ftnlen)sizeof(doublereal));
  1276.     do_fio(&c__1, (char *)&xcbv, (ftnlen)sizeof(doublereal));
  1277.     e_wsfe();
  1278. /*<   415 format('0warning:  unable to match forward and reverse diode regio >*/
  1279. /*<      1ns',/,11x,'bv = ',1pd10.3,' and ibv = ',d10.3,/) >*/
  1280. /*<   416 value(locv+13)=xbv >*/
  1281. L416:
  1282.     blank_1.value[locv + 12] = xbv;
  1283. /*<   418 loc=nodplc(loc) >*/
  1284. L418:
  1285.     loc = nodplc[loc - 1];
  1286. /*<       go to 410 >*/
  1287.     goto L410;
  1288.  
  1289. /*  bipolar transistor models */
  1290.  
  1291. /*<   420 loc=locate(22) >*/
  1292. L420:
  1293.     loc = cirdat_1.locate[21];
  1294. /*<   430 if (loc.eq.0) go to 440 >*/
  1295. L430:
  1296.     if (loc == 0) {
  1297.     goto L440;
  1298.     }
  1299. /*<       locv=nodplc(loc+1) >*/
  1300.     locv = nodplc[loc];
  1301. /*<       if (value(locv+4).ne.0.0d0) value(locv+4)=1.0d0/value(locv+4) >*/
  1302.     if (blank_1.value[locv + 3] != 0.) {
  1303.     blank_1.value[locv + 3] = 1. / blank_1.value[locv + 3];
  1304.     }
  1305. /*<       if (value(locv+5).ne.0.0d0) value(locv+5)=1.0d0/value(locv+5) >*/
  1306.     if (blank_1.value[locv + 4] != 0.) {
  1307.     blank_1.value[locv + 4] = 1. / blank_1.value[locv + 4];
  1308.     }
  1309. /*<       if (value(locv+10).ne.0.0d0) value(locv+10)=1.0d0/value(locv+10) >*/
  1310.     if (blank_1.value[locv + 9] != 0.) {
  1311.     blank_1.value[locv + 9] = 1. / blank_1.value[locv + 9];
  1312.     }
  1313. /*<       if (value(locv+11).ne.0.0d0) value(locv+11)=1.0d0/value(locv+11) >*/
  1314.     if (blank_1.value[locv + 10] != 0.) {
  1315.     blank_1.value[locv + 10] = 1. / blank_1.value[locv + 10];
  1316.     }
  1317. /*<       if (value(locv+19).ne.0.0d0) value(locv+19)=1.0d0/value(locv+19) >*/
  1318.     if (blank_1.value[locv + 18] != 0.) {
  1319.     blank_1.value[locv + 18] = 1. / blank_1.value[locv + 18];
  1320.     }
  1321. /*<       if (value(locv+20).ne.0.0d0) value(locv+20)=1.0d0/value(locv+20) >*/
  1322.     if (blank_1.value[locv + 19] != 0.) {
  1323.     blank_1.value[locv + 19] = 1. / blank_1.value[locv + 19];
  1324.     }
  1325. /*<       if (value(locv+26).ne.0.0d0) value(locv+26)=1.0d0/value(locv+26) >*/
  1326. /*<      1   /1.44d0 >*/
  1327.     if (blank_1.value[locv + 25] != 0.) {
  1328.     blank_1.value[locv + 25] = 1. / blank_1.value[locv + 25] / 1.44;
  1329.     }
  1330. /*<       value(locv+28)=value(locv+28)/rad*value(locv+24) >*/
  1331.     blank_1.value[locv + 27] = blank_1.value[locv + 27] / knstnt_1.rad * 
  1332.         blank_1.value[locv + 23];
  1333. /*<       if (value(locv+35).ne.0.0d0) value(locv+35)=1.0d0/value(locv+35) >*/
  1334. /*<      1   /1.44d0 >*/
  1335.     if (blank_1.value[locv + 34] != 0.) {
  1336.     blank_1.value[locv + 34] = 1. / blank_1.value[locv + 34] / 1.44;
  1337.     }
  1338. /*<       pe=value(locv+22) >*/
  1339.     pe = blank_1.value[locv + 21];
  1340. /*<       xme=value(locv+23) >*/
  1341.     xme = blank_1.value[locv + 22];
  1342. /*<       pc=value(locv+30) >*/
  1343.     pc = blank_1.value[locv + 29];
  1344. /*<       xmc=value(locv+31) >*/
  1345.     xmc = blank_1.value[locv + 30];
  1346. /*<       fc=value(locv+46) >*/
  1347.     fc = blank_1.value[locv + 45];
  1348. /*<       value(locv+46)=fc*pe >*/
  1349.     blank_1.value[locv + 45] = fc * pe;
  1350. /*<       xfc=dlog(1.0d0-fc) >*/
  1351.     xfc = log(1. - fc);
  1352. /*<       value(locv+47)=pe*(1.0d0-dexp((1.0d0-xme)*xfc))/(1.0d0-xme) >*/
  1353.     blank_1.value[locv + 46] = pe * (1. - exp((1. - xme) * xfc)) / (1. - xme);
  1354.  
  1355. /*<       value(locv+48)=dexp((1.0d0+xme)*xfc) >*/
  1356.     blank_1.value[locv + 47] = exp((xme + 1.) * xfc);
  1357. /*<       value(locv+49)=1.0d0-fc*(1.0d0+xme) >*/
  1358.     blank_1.value[locv + 48] = 1. - fc * (xme + 1.);
  1359. /*<       value(locv+50)=fc*pc >*/
  1360.     blank_1.value[locv + 49] = fc * pc;
  1361. /*<       value(locv+51)=pc*(1.0d0-dexp((1.0d0-xmc)*xfc))/(1.0d0-xmc) >*/
  1362.     blank_1.value[locv + 50] = pc * (1. - exp((1. - xmc) * xfc)) / (1. - xmc);
  1363.  
  1364. /*<       value(locv+52)=dexp((1.0d0+xmc)*xfc) >*/
  1365.     blank_1.value[locv + 51] = exp((xmc + 1.) * xfc);
  1366. /*<       value(locv+53)=1.0d0-fc*(1.0d0+xmc) >*/
  1367.     blank_1.value[locv + 52] = 1. - fc * (xmc + 1.);
  1368. /*<       csat=value(locv+1) >*/
  1369.     csat = blank_1.value[locv];
  1370. /*<       value(locv+54)=vt*dlog(vt/(root2*csat)) >*/
  1371.     blank_1.value[locv + 53] = status_1.vt * log(status_1.vt / (
  1372.         knstnt_1.root2 * csat));
  1373. /*<       loc=nodplc(loc) >*/
  1374.     loc = nodplc[loc - 1];
  1375. /*<       go to 430 >*/
  1376.     goto L430;
  1377.  
  1378. /*  jfet models */
  1379.  
  1380. /*<   440 loc=locate(23) >*/
  1381. L440:
  1382.     loc = cirdat_1.locate[22];
  1383. /*<   450 if (loc.eq.0) go to 460 >*/
  1384. L450:
  1385.     if (loc == 0) {
  1386.     goto L460;
  1387.     }
  1388. /*<       locv=nodplc(loc+1) >*/
  1389.     locv = nodplc[loc];
  1390. /*<       if (value(locv+4).ne.0.0d0) value(locv+4)=1.0d0/value(locv+4) >*/
  1391.     if (blank_1.value[locv + 3] != 0.) {
  1392.     blank_1.value[locv + 3] = 1. / blank_1.value[locv + 3];
  1393.     }
  1394. /*<       if (value(locv+5).ne.0.0d0) value(locv+5)=1.0d0/value(locv+5) >*/
  1395.     if (blank_1.value[locv + 4] != 0.) {
  1396.     blank_1.value[locv + 4] = 1. / blank_1.value[locv + 4];
  1397.     }
  1398. /*<       pb=value(locv+8) >*/
  1399.     pb = blank_1.value[locv + 7];
  1400. /*<       xm=0.5d0 >*/
  1401.     xm = .5;
  1402. /*<       fc=value(locv+12) >*/
  1403.     fc = blank_1.value[locv + 11];
  1404. /*<       value(locv+12)=fc*pb >*/
  1405.     blank_1.value[locv + 11] = fc * pb;
  1406. /*<       xfc=dlog(1.0d0-fc) >*/
  1407.     xfc = log(1. - fc);
  1408. /*<       value(locv+13)=pb*(1.0d0-dexp((1.0d0-xm)*xfc))/(1.0d0-xm) >*/
  1409.     blank_1.value[locv + 12] = pb * (1. - exp((1. - xm) * xfc)) / (1. - xm);
  1410. /*<       value(locv+14)=dexp((1.0d0+xm)*xfc) >*/
  1411.     blank_1.value[locv + 13] = exp((xm + 1.) * xfc);
  1412. /*<       value(locv+15)=1.0d0-fc*(1.0d0+xm) >*/
  1413.     blank_1.value[locv + 14] = 1. - fc * (xm + 1.);
  1414. /*<       csat=value(locv+9) >*/
  1415.     csat = blank_1.value[locv + 8];
  1416. /*<       value(locv+16)=vt*dlog(vt/(root2*csat)) >*/
  1417.     blank_1.value[locv + 15] = status_1.vt * log(status_1.vt / (
  1418.         knstnt_1.root2 * csat));
  1419. /*<       loc=nodplc(loc) >*/
  1420.     loc = nodplc[loc - 1];
  1421. /*<       go to 450 >*/
  1422.     goto L450;
  1423.  
  1424. /*  mosfet models */
  1425.  
  1426. /*<   460 loc=locate(24) >*/
  1427. L460:
  1428.     loc = cirdat_1.locate[23];
  1429. /*<   470 if (loc.eq.0) go to 600 >*/
  1430. L470:
  1431.     if (loc == 0) {
  1432.     goto L600;
  1433.     }
  1434. /*<       locv=nodplc(loc+1) >*/
  1435.     locv = nodplc[loc];
  1436. /*<       type=nodplc(loc+2) >*/
  1437.     type = (doublereal) nodplc[loc + 1];
  1438. /*<       if (value(locv+7).ne.0.0d0) value(locv+7)=1.0d0/value(locv+7) >*/
  1439.     if (blank_1.value[locv + 6] != 0.) {
  1440.     blank_1.value[locv + 6] = 1. / blank_1.value[locv + 6];
  1441.     }
  1442. /*<       if (value(locv+8).ne.0.0d0) value(locv+8)=1.0d0/value(locv+8) >*/
  1443.     if (blank_1.value[locv + 7] != 0.) {
  1444.     blank_1.value[locv + 7] = 1. / blank_1.value[locv + 7];
  1445.     }
  1446. /*<       if (value(locv+16).ne.0.0d0) value(locv+16)=1.0d0/value(locv+16) >*/
  1447.     if (blank_1.value[locv + 15] != 0.) {
  1448.     blank_1.value[locv + 15] = 1. / blank_1.value[locv + 15];
  1449.     }
  1450. /*<       value(locv+23)=value(locv+23)*1.0d6 >*/
  1451.     blank_1.value[locv + 22] *= 1e6;
  1452. /*<       value(locv+24)=value(locv+24)*1.0d4 >*/
  1453.     blank_1.value[locv + 23] *= 1e4;
  1454. /*<       value(locv+25)=value(locv+25)*1.0d4 >*/
  1455.     blank_1.value[locv + 24] *= 1e4;
  1456. /*<       if (value(locv+22).ne.0.0d0) value(locv+22)=epsox/value(locv+22) >*/
  1457.     if (blank_1.value[locv + 21] != 0.) {
  1458.     blank_1.value[locv + 21] = knstnt_1.epsox / blank_1.value[locv + 21];
  1459.     }
  1460. /*<       value(locv+29)=value(locv+29)*1.0d-4 >*/
  1461.     blank_1.value[locv + 28] *= 1e-4;
  1462. /*<       if (lev.eq.3) go to 472 >*/
  1463.     if (lev == 3) {
  1464.     goto L472;
  1465.     }
  1466. /*<       value(locv+30)=value(locv+30)*1.0d2 >*/
  1467.     blank_1.value[locv + 29] *= 100.;
  1468. /*<       go to 473 >*/
  1469.     goto L473;
  1470.  
  1471. /*   move mos3 parameters : theta from locations locv+40 to locv+30 */
  1472. /*                          eta                       41         31 */
  1473. /*                          kappa                     42         32 */
  1474. /*   and replace locv+6 by (xd)**2 */
  1475.  
  1476. /*<   472 value(locv+39)=value(locv+39) >*/
  1477. /*<      1   *0.25d0*twopi*epssil/value(locv+22) >*/
  1478. L472:
  1479.     blank_1.value[locv + 38] = blank_1.value[locv + 38] * .25 * 
  1480.         knstnt_1.twopi * knstnt_1.epssil / blank_1.value[locv + 21];
  1481. /*<       value(locv+30)=value(locv+40) >*/
  1482.     blank_1.value[locv + 29] = blank_1.value[locv + 39];
  1483. /*<       value(locv+31)=value(locv+41)*8.15d-22/value(locv+22) >*/
  1484.     blank_1.value[locv + 30] = blank_1.value[locv + 40] * 8.15e-22 / 
  1485.         blank_1.value[locv + 21];
  1486. /*<       value(locv+32)=value(locv+42) >*/
  1487.     blank_1.value[locv + 31] = blank_1.value[locv + 41];
  1488. /*<       if (value(locv+23).gt.0.0d0) >*/
  1489. /*<      1    value(locv+6)=(epssil+epssil)/(charge*value(locv+23)) >*/
  1490.     if (blank_1.value[locv + 22] > 0.) {
  1491.     blank_1.value[locv + 5] = (knstnt_1.epssil + knstnt_1.epssil) / (
  1492.         knstnt_1.charge * blank_1.value[locv + 22]);
  1493.     }
  1494.  
  1495. /*   noise parameters */
  1496.  
  1497. /*<   473 pb=value(locv+12) >*/
  1498. L473:
  1499.     pb = blank_1.value[locv + 11];
  1500. /*<       xm=0.5d0 >*/
  1501.     xm = .5;
  1502. /*<       fc=value(locv+38) >*/
  1503.     fc = blank_1.value[locv + 37];
  1504. /*<       value(locv+38)=fc*pb >*/
  1505.     blank_1.value[locv + 37] = fc * pb;
  1506. /*<       xfc=dlog(1.0d0-fc) >*/
  1507.     xfc = log(1. - fc);
  1508. /*<       value(locv+40)=pb*(1.0d0-dexp((1.0d0-xm)*xfc))/(1.0d0-xm) >*/
  1509.     blank_1.value[locv + 39] = pb * (1. - exp((1. - xm) * xfc)) / (1. - xm);
  1510. /*<       value(locv+41)=dexp((1.0d0+xm)*xfc) >*/
  1511.     blank_1.value[locv + 40] = exp((xm + 1.) * xfc);
  1512. /*<       value(locv+42)=1.0d0-fc*(1.0d0+xm) >*/
  1513.     blank_1.value[locv + 41] = 1. - fc * (xm + 1.);
  1514. /*<       value(locv+43)=-1.0d0 >*/
  1515.     blank_1.value[locv + 42] = -1.;
  1516. /*<       value(locv+44)=value(locv+2)- >*/
  1517. /*<      1   type*value(locv+4)*dsqrt(value(locv+5)) >*/
  1518.     blank_1.value[locv + 43] = blank_1.value[locv + 1] - type * blank_1.value[
  1519.         locv + 3] * sqrt(blank_1.value[locv + 4]);
  1520. /*<   475 if (value(locv+22).ne.0.0d0.and.lev.ne.3) >*/
  1521. /*<      1   value(locv+30)=value(locv+30)*epssil/value(locv+22) >*/
  1522. /* L475: */
  1523.     if (blank_1.value[locv + 21] != 0. && lev != 3) {
  1524.     blank_1.value[locv + 29] = blank_1.value[locv + 29] * knstnt_1.epssil 
  1525.         / blank_1.value[locv + 21];
  1526.     }
  1527. /*<       loc=nodplc(loc) >*/
  1528.     loc = nodplc[loc - 1];
  1529. /*<       go to 470 >*/
  1530.     goto L470;
  1531.  
  1532. /*  reserve additional nodes */
  1533.  
  1534. /*  diodes */
  1535.  
  1536. /*<   600 loc=locate(11) >*/
  1537. L600:
  1538.     loc = cirdat_1.locate[10];
  1539. /*<   610 if ((loc.eq.0).or.(nodplc(loc+16).ne.0)) go to 700 >*/
  1540. L610:
  1541.     if (loc == 0 || nodplc[loc + 15] != 0) {
  1542.     goto L700;
  1543.     }
  1544. /*<       locm=nodplc(loc+5) >*/
  1545.     locm = nodplc[loc + 4];
  1546. /*<       locm=nodplc(locm+1) >*/
  1547.     locm = nodplc[locm];
  1548. /*<       if (value(locm+2).eq.0.0d0) go to 620 >*/
  1549.     if (blank_1.value[locm + 1] == 0.) {
  1550.     goto L620;
  1551.     }
  1552. /*<       numnod=numnod+1 >*/
  1553.     ++cirdat_1.numnod;
  1554. /*<       nodplc(loc+4)=numnod >*/
  1555.     nodplc[loc + 3] = cirdat_1.numnod;
  1556. /*<       go to 630 >*/
  1557.     goto L630;
  1558. /*<   620 nodplc(loc+4)=nodplc(loc+2) >*/
  1559. L620:
  1560.     nodplc[loc + 3] = nodplc[loc + 1];
  1561. /*<   630 loc=nodplc(loc) >*/
  1562. L630:
  1563.     loc = nodplc[loc - 1];
  1564. /*<       go to 610 >*/
  1565.     goto L610;
  1566.  
  1567. /*  transistors */
  1568.  
  1569. /*<   700 loc=locate(12) >*/
  1570. L700:
  1571.     loc = cirdat_1.locate[11];
  1572. /*<   710 if ((loc.eq.0).or.(nodplc(loc+36).ne.0)) go to 800 >*/
  1573. L710:
  1574.     if (loc == 0 || nodplc[loc + 35] != 0) {
  1575.     goto L800;
  1576.     }
  1577. /*<       nodplc(loc+30)=nodplc(loc+5) >*/
  1578.     nodplc[loc + 29] = nodplc[loc + 4];
  1579. /*<       locm=nodplc(loc+8) >*/
  1580.     locm = nodplc[loc + 7];
  1581. /*<       locm=nodplc(locm+1) >*/
  1582.     locm = nodplc[locm];
  1583. /*<       if (value(locm+16).eq.0.0d0) go to 720 >*/
  1584.     if (blank_1.value[locm + 15] == 0.) {
  1585.     goto L720;
  1586.     }
  1587. /*<       numnod=numnod+1 >*/
  1588.     ++cirdat_1.numnod;
  1589. /*<       nodplc(loc+6)=numnod >*/
  1590.     nodplc[loc + 5] = cirdat_1.numnod;
  1591. /*<       go to 730 >*/
  1592.     goto L730;
  1593. /*<   720 nodplc(loc+6)=nodplc(loc+3) >*/
  1594. L720:
  1595.     nodplc[loc + 5] = nodplc[loc + 2];
  1596. /*<   730 if (value(locm+20).eq.0.0d0) go to 740 >*/
  1597. L730:
  1598.     if (blank_1.value[locm + 19] == 0.) {
  1599.     goto L740;
  1600.     }
  1601. /*<       numnod=numnod+1 >*/
  1602.     ++cirdat_1.numnod;
  1603. /*<       nodplc(loc+5)=numnod >*/
  1604.     nodplc[loc + 4] = cirdat_1.numnod;
  1605. /*<       go to 750 >*/
  1606.     goto L750;
  1607. /*<   740 nodplc(loc+5)=nodplc(loc+2) >*/
  1608. L740:
  1609.     nodplc[loc + 4] = nodplc[loc + 1];
  1610. /*<   750 if (value(locm+19).eq.0.0d0) go to 760 >*/
  1611. L750:
  1612.     if (blank_1.value[locm + 18] == 0.) {
  1613.     goto L760;
  1614.     }
  1615. /*<       numnod=numnod+1 >*/
  1616.     ++cirdat_1.numnod;
  1617. /*<       nodplc(loc+7)=numnod >*/
  1618.     nodplc[loc + 6] = cirdat_1.numnod;
  1619. /*<       go to 770 >*/
  1620.     goto L770;
  1621. /*<   760 nodplc(loc+7)=nodplc(loc+4) >*/
  1622. L760:
  1623.     nodplc[loc + 6] = nodplc[loc + 3];
  1624. /*<   770 loc=nodplc(loc) >*/
  1625. L770:
  1626.     loc = nodplc[loc - 1];
  1627. /*<       go to 710 >*/
  1628.     goto L710;
  1629.  
  1630. /*  jfets */
  1631.  
  1632. /*<   800 loc=locate(13) >*/
  1633. L800:
  1634.     loc = cirdat_1.locate[12];
  1635. /*<   810 if ((loc.eq.0).or.(nodplc(loc+25).ne.0)) go to 900 >*/
  1636. L810:
  1637.     if (loc == 0 || nodplc[loc + 24] != 0) {
  1638.     goto L900;
  1639.     }
  1640. /*<       locm=nodplc(loc+7) >*/
  1641.     locm = nodplc[loc + 6];
  1642. /*<       locm=nodplc(locm+1) >*/
  1643.     locm = nodplc[locm];
  1644. /*<       if (value(locm+4).eq.0.0d0) go to 820 >*/
  1645.     if (blank_1.value[locm + 3] == 0.) {
  1646.     goto L820;
  1647.     }
  1648. /*<       numnod=numnod+1 >*/
  1649.     ++cirdat_1.numnod;
  1650. /*<       nodplc(loc+5)=numnod >*/
  1651.     nodplc[loc + 4] = cirdat_1.numnod;
  1652. /*<       go to 830 >*/
  1653.     goto L830;
  1654. /*<   820 nodplc(loc+5)=nodplc(loc+2) >*/
  1655. L820:
  1656.     nodplc[loc + 4] = nodplc[loc + 1];
  1657. /*<   830 if (value(locm+5).eq.0.0d0) go to 840 >*/
  1658. L830:
  1659.     if (blank_1.value[locm + 4] == 0.) {
  1660.     goto L840;
  1661.     }
  1662. /*<       numnod=numnod+1 >*/
  1663.     ++cirdat_1.numnod;
  1664. /*<       nodplc(loc+6)=numnod >*/
  1665.     nodplc[loc + 5] = cirdat_1.numnod;
  1666. /*<       go to 850 >*/
  1667.     goto L850;
  1668. /*<   840 nodplc(loc+6)=nodplc(loc+4) >*/
  1669. L840:
  1670.     nodplc[loc + 5] = nodplc[loc + 3];
  1671. /*<   850 loc=nodplc(loc) >*/
  1672. L850:
  1673.     loc = nodplc[loc - 1];
  1674. /*<       go to 810 >*/
  1675.     goto L810;
  1676.  
  1677. /*  mosfets */
  1678.  
  1679. /*<   900 loc=locate(14) >*/
  1680. L900:
  1681.     loc = cirdat_1.locate[13];
  1682. /*<   910 if (loc.eq.0) go to 1000 >*/
  1683. L910:
  1684.     if (loc == 0) {
  1685.     goto L1000;
  1686.     }
  1687. /*<       locm=nodplc(loc+8) >*/
  1688.     locm = nodplc[loc + 7];
  1689. /*<       locm=nodplc(locm+1) >*/
  1690.     locm = nodplc[locm];
  1691. /*<       locv=nodplc(loc+1) >*/
  1692.     locv = nodplc[loc];
  1693. /*<       xleff=value(locv+1)-2.0d0*value(locm+28) >*/
  1694.     xleff = blank_1.value[locv] - blank_1.value[locm + 27] * 2.;
  1695. /*<       if (xleff.gt.0.0d0) go to 915 >*/
  1696.     if (xleff > 0.) {
  1697.     goto L915;
  1698.     }
  1699. /*<       write(iofile,911) value(locv),value(locm) >*/
  1700.     io__70.ciunit = status_1.iofile;
  1701.     s_wsfe(&io__70);
  1702.     do_fio(&c__1, (char *)&blank_1.value[locv - 1], (ftnlen)sizeof(doublereal)
  1703.         );
  1704.     do_fio(&c__1, (char *)&blank_1.value[locm - 1], (ftnlen)sizeof(doublereal)
  1705.         );
  1706.     e_wsfe();
  1707. /*<   911 format('0*error*:  effective channel length of ',a8,' less than ', >*/
  1708. /*<      1   'zero.',/' check value of ld for model ',a8) >*/
  1709. /*<       if (nodplc(loc+33).ne.0) go to 960 >*/
  1710.     if (nodplc[loc + 32] != 0) {
  1711.     goto L960;
  1712.     }
  1713. /*<   915 if ((value(locm+7).eq.0.0d0).and. >*/
  1714. /*<      1    (value(locm+16).eq.0.0d0)) go to 920 >*/
  1715. L915:
  1716.     if (blank_1.value[locm + 6] == 0. && blank_1.value[locm + 15] == 0.) {
  1717.     goto L920;
  1718.     }
  1719. /*<       numnod=numnod+1 >*/
  1720.     ++cirdat_1.numnod;
  1721. /*<       nodplc(loc+6)=numnod >*/
  1722.     nodplc[loc + 5] = cirdat_1.numnod;
  1723. /*<       go to 930 >*/
  1724.     goto L930;
  1725. /*<   920 nodplc(loc+6)=nodplc(loc+2) >*/
  1726. L920:
  1727.     nodplc[loc + 5] = nodplc[loc + 1];
  1728. /*<   930 if ((value(locm+8).eq.0.0d0).and. >*/
  1729. /*<      1    (value(locm+16).eq.0.0d0)) go to 940 >*/
  1730. L930:
  1731.     if (blank_1.value[locm + 7] == 0. && blank_1.value[locm + 15] == 0.) {
  1732.     goto L940;
  1733.     }
  1734. /*<       numnod=numnod+1 >*/
  1735.     ++cirdat_1.numnod;
  1736. /*<       nodplc(loc+7)=numnod >*/
  1737.     nodplc[loc + 6] = cirdat_1.numnod;
  1738. /*<       go to 950 >*/
  1739.     goto L950;
  1740. /*<   940 nodplc(loc+7)=nodplc(loc+4) >*/
  1741. L940:
  1742.     nodplc[loc + 6] = nodplc[loc + 3];
  1743. /*<   950 ad=value(locv+3) >*/
  1744. L950:
  1745.     ad = blank_1.value[locv + 2];
  1746. /*<       as=value(locv+4) >*/
  1747.     as = blank_1.value[locv + 3];
  1748. /*<       if ((ad.le.0.0d0).or.(as.le.0.0d0) >*/
  1749. /*<      1   .and.value(locm+11).le.0.0d0) >*/
  1750. /*<      2   value(locm+11)=1.0d-14 >*/
  1751.     if (ad <= 0. || as <= 0. && blank_1.value[locm + 10] <= 0.) {
  1752.     blank_1.value[locm + 10] = 1e-14;
  1753.     }
  1754. /*<   960 loc=nodplc(loc) >*/
  1755. L960:
  1756.     loc = nodplc[loc - 1];
  1757. /*<       go to 910 >*/
  1758.     goto L910;
  1759.  
  1760. /*  transmission lines */
  1761.  
  1762. /*<  1000 loc=locate(17) >*/
  1763. L1000:
  1764.     loc = cirdat_1.locate[16];
  1765. /*<  1010 if ((loc.eq.0).or.(nodplc(loc+33).ne.0)) go to 2000 >*/
  1766. L1010:
  1767.     if (loc == 0 || nodplc[loc + 32] != 0) {
  1768.     goto L2000;
  1769.     }
  1770. /*<       numnod=numnod+1 >*/
  1771.     ++cirdat_1.numnod;
  1772. /*<       nodplc(loc+6)=numnod >*/
  1773.     nodplc[loc + 5] = cirdat_1.numnod;
  1774. /*<       numnod=numnod+1 >*/
  1775.     ++cirdat_1.numnod;
  1776. /*<       nodplc(loc+7)=numnod >*/
  1777.     nodplc[loc + 6] = cirdat_1.numnod;
  1778. /*<       loc=nodplc(loc) >*/
  1779.     loc = nodplc[loc - 1];
  1780. /*<       go to 1010 >*/
  1781.     goto L1010;
  1782.  
  1783. /*  finished */
  1784.  
  1785. /*<  2000 return >*/
  1786. L2000:
  1787.     return 0;
  1788. /*<       end >*/
  1789. } /* modchk_ */
  1790.  
  1791. #undef cvalue
  1792. #undef nodplc
  1793. #undef aptype
  1794. #undef antype
  1795. #undef titlem
  1796. #undef titlej
  1797. #undef titleb
  1798. #undef titled
  1799. #undef ampar
  1800. #undef aundef
  1801. #undef cpar
  1802.  
  1803.  
  1804.